#pragma once
#include "Com_Config.h"
#include "Com_Debug.h"

// 寄存器地址
#define PCA9557_INPUT_PORT 0x00
#define PCA9557_OUTPUT_PORT 0x01
#define PCA9557_POLARITY_INVERSION_PORT 0x02
#define PCA9557_CONFIGURATION_PORT 0x03

#define LCD_CS_GPIO BIT(0)   // PCA9557_GPIO_NUM_1
#define PA_EN_GPIO BIT(1)    // PCA9557_GPIO_NUM_2
#define DVP_PWDN_GPIO BIT(2) // PCA9557_GPIO_NUM_3

#define PCA9557_SENSOR_ADDR 0x19 /*!< Slave address of the MPU9250 sensor */

#define SET_BITS(_m, _s, _v) ((_v) ? (_m) | ((_s)) : (_m) & ~((_s)))

// 读取
esp_err_t Inf_PCA9557_Read(uint8_t reg_addr, uint8_t *data, size_t len);

// 发送数据
esp_err_t Inf_PCA9557_Send(uint8_t reg_addr, uint8_t data);

// 初始化
void Inf_PCA9557_Init(void);

// 控制 PCA9557_LCD_CS 引脚输出高低电平 参数0输出低电平 参数1输出高电平
void Inf_lcd_cs(uint8_t level);

// 控制 PCA9557_PA_EN 引脚输出高低电平 参数0输出低电平 参数1输出高电平
void Inf_pa_en(uint8_t level);

// 控制 PCA9557_DVP_PWDN 引脚输出高低电平 参数0输出低电平 参数1输出高电平
void Inf_dvp_pwdn(uint8_t level);

// 控制某个GPIO引脚,输出高低电平
esp_err_t Inf_QCA9557_Gpio_Control(uint8_t gpio, uint8_t value);